package com.zhangyang;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * Created by ASUS on 2017/10/13.
 * 直接缓冲区 实现一个文件的拷贝
 */
public class DirectBuffer {
    public static void main(String[] args) throws Exception {
        //缓冲区变量!
//        bufferVariable();

        //读取文件相关变量
        String  fileIn=String.format("D:\\gupao\\txt\\directBuffer.txt");
        FileInputStream fileInputStream=new FileInputStream(fileIn);
        FileChannel inFileChannel=fileInputStream.getChannel();

        //输出文件相关变量
        String  fileOut=String.format("D:\\gupao\\txt\\directBufferCopy.txt");
        FileOutputStream fileOutputStream=new FileOutputStream(fileOut);
        FileChannel outFileChannel=fileOutputStream.getChannel();

        //字节缓冲区
        ByteBuffer byteBuffer=ByteBuffer.allocateDirect(30);

        while(true){
            int count=inFileChannel.read(byteBuffer);
            System.out.println("count:"+count);
            if(count==-1){
                //如果 count为-1
                break;
            }

            //读取完数据 需要设置缓冲去的position和limit的位置！
            byteBuffer.flip();
            //写入到 对应的输出文件通道
            outFileChannel.write(byteBuffer);
            //需要重新设置 位置
            byteBuffer.clear();
        }

        fileInputStream.close();
        fileOutputStream.close();
    }


    /**
     * 缓冲去变量
     */
    public static void bufferVariable(){
//        int j=0;
//        for(int i=0;i<100;++i){
//            j=++j;
//        }  //100

        int j=0;
        for(int i=0;i<100;++i){
            j++;
        }  //100
        //类似一个过程： 一个临时变量:
        /**
         * -------------j=j++;
         * int temp=j
         * j=j+1;
         * j=temp
         *
         * -------------j++;
         * int temp=j;
         * j=j+1;
         * 那么这样 j的值就会变化了!
         */

        System.out.println("j:"+j);  //0

//        int j = 0;
//        int temp=0;
//        for(int i = 0; i < 100; i++){
//            temp=j;
//            temp++;
//            j=temp;
//        }
//        System.out.println(j); //100
    }
}
